package com.keywaysoft.workflow.utils.exception.code;

/**
 * 全局错误码 10000-15000
 * <p>
 * 预警异常编码    范围： 30000~34999
 * 标准服务异常编码 范围：35000~39999
 * 邮件服务异常编码 范围：40000~44999
 * 短信服务异常编码 范围：45000~49999
 * 权限服务异常编码 范围：50000-59999
 * 文件服务异常编码 范围：60000~64999
 * 日志服务异常编码 范围：65000~69999
 * 消息服务异常编码 范围：70000~74999
 * 开发者平台异常编码 范围：75000~79999
 * 搜索服务异常编码 范围：80000-84999
 * 共享交换异常编码 范围：85000-89999
 * 移动终端平台 异常码 范围：90000-94999
 * <p>
 * 安全保障平台    范围：        95000-99999
 * 软硬件平台 异常编码 范围：    100000-104999
 * 运维服务平台 异常编码 范围：  105000-109999
 * 统一监管平台异常 编码 范围：  110000-114999
 * 认证方面的异常编码  范围：115000-115999
 *
 */
public enum ExceptionCode implements BaseExceptionCode {

    //系统相关 start
    SUCCESS(0, "成功"),
    SYSTEM_BUSY(-1, "系统繁忙~请稍后再试~"),
    SYSTEM_TIMEOUT(-2, "系统维护中~请稍后再试~"),
    PARAM_EX(-3, "参数类型解析异常"),
    SQL_EX(-4, "运行SQL出现异常"),
    NULL_POINT_EX(-5, "空指针异常"),
    ILLEGALA_ARGUMENT_EX(-6, "无效参数异常"),
    MEDIA_TYPE_EX(-7, "请求类型异常"),
    LOAD_RESOURCES_ERROR(-8, "加载资源出错"),
    BASE_VALID_PARAM(-9, "统一验证参数异常"),
    OPERATION_EX(-10, "操作异常"),

    CODE_ERR(101, "验证码错误"),
    NOT_ALLOW_USE(102, "请联系管理员添加信息"),
    NOT_FOUND_MEMBER(103, "用户信息不存在"),
    PASSWORD_NOT_MATCH(104, "用户名或密码不正确"),
    PASSWORD_VIOLATION(105, "密码不符合规范：8-16位，包含数字，大写字母，小写字母"),
    NOT_LOGGED_IN(106, "未登录，请重新登录"),
    USERNAME_EXISTING(107, "当前用户名已存在"),
    LOGIN_NO_ACCESS(108, "当前用户名无登录权限"),
    PASSWORD_NOT_RIGHT(109, "旧密码不正确"),
    REPEAT_PHONENUM(110, "手机号码重复"),
    REPEAT_IDCARD(111, "身份证号码重复"),
    BAN_LOGIN(112, "该已帐号禁止登录"),
    BAN_IPS(113, "当前ip禁止登录"),
    KEY_ERR(114, "无效的机器码"),


    OK(200, "OK"),
    BAD_REQUEST(400, "错误的请求"),

    UNAUTHORIZED(401, "未经授权"),

    NOT_FOUND(404, "没有找到资源"),
    METHOD_NOT_ALLOWED(405, "不支持当前请求类型"),

    TOO_MANY_REQUESTS(429, "请求超过次数限制"),
    INTERNAL_SERVER_ERROR(500, "内部服务错误"),
    BAD_GATEWAY(502, "网关错误"),
    GATEWAY_TIMEOUT(504, "网关超时"),
    //系统相关 end

    REQUIRED_FILE_PARAM_EX(1001, "请求中必须至少包含一个有效文件"),
    //jwt token 相关 start

    JWT_TOKEN_EXPIRED(40001, "会话超时，请重新登录"),
    JWT_SIGNATURE(40002, "不合法的token，请认真比对 token 的签名"),
    JWT_ILLEGAL_ARGUMENT(40003, "缺少token参数"),
    JWT_GEN_TOKEN_FAIL(40004, "生成token失败"),
    JWT_PARSER_TOKEN_FAIL(40005, "解析token失败"),
    JWT_USER_INVALID(40006, "用户名或密码错误"),
    JWT_USER_ENABLED(40007, "用户已经被禁用！"),
    //jwt token 相关 end

//    // 请求参数验证信息 100 - 149
//    VALIDATE_ERR(100, "参数验证错误"),
//    CODE_ERR(101, "验证码错误"),
//    ID_ERR(102, "数据id不正确"),
//    REPEAT_OPTION(103, "选项不允许重复"),
//    CODE_NOT_NULL(104, "验证码不能为空"),
//
//    // 网络错误 200 - 249
//    NET_ERROR(200, "网络错误"),
//
//

//
//    // 数据信息提示 300 - 349
//    DATA_NOT_FOUND(300, "数据信息不存在"),
    ;

    private int code;
    private String msg;

    ExceptionCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        return msg;
    }


    public ExceptionCode build(String msg, Object... param) {
        this.msg = String.format(msg, param);
        return this;
    }

    public ExceptionCode param(Object... param) {
        msg = String.format(msg, param);
        return this;
    }
}
